package com.erp.erp_dao.warehouse;

import com.erp.erp_entitys.warehouse.entity.ResourceSamplesDetailEntity;
import com.erp.erp_entitys.warehouse.req.*;
import com.erp.erp_entitys.warehouse.rsp.ImportPurchaseSampleProductRsp;
import com.erp.erp_entitys.warehouse.rsp.ImportPurchaseSampleRsp;
import com.erp.erp_entitys.warehouse.req.ImportResourceSamplesProductReq;
import com.erp.erp_entitys.warehouse.req.InventoryDetailStatisticsReq;
import com.erp.erp_entitys.warehouse.req.ResourceSamplesStockListReq;
import com.erp.erp_entitys.warehouse.rsp.InventoryDetailStatisticsRsp;
import com.erp.erp_entitys.warehouse.rsp.ResourceSamplesStockListRsp;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 仓库管理-资源样品明细表(ResourceSamplesDetail)表数据库访问层
 *
 * @author lst
 * @since 2020-11-28 15:22:57
 */
public interface IResourceSamplesDetailDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    ResourceSamplesDetailEntity queryById(Integer id);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param resourceSamplesDetail 实例对象
     * @return 对象列表
     */
    List<ResourceSamplesDetailEntity> queryAll(ResourceSamplesDetailEntity resourceSamplesDetail);

    /**
     * 通过id批量查询
     * @param ids 登记id
     * @return 登记集合
     */
    List<ResourceSamplesDetailEntity> getResourceSamplesDetailByIds(@Param("ids") List<String> ids);

    /**
     * 获取同一批资源样品数据（产品编码、规格编码、货号、批次、仓库、单价 如果都相同 则为同一组）
     * @param req 查询条件
     * @return 查询结果
     */
    BigDecimal getTheSameResourceSamplesInfo(TheSameResourceSamplesInfoReq req);

    /**
     * 新增数据
     *
     * @param resourceSamplesDetail 实例对象
     * @return 影响行数
     */
    int insert(ResourceSamplesDetailEntity resourceSamplesDetail);

    /**
     * 详情批量新增
     * @param list 新增对象集合
     * @return 影响行数
     */
    int addList(List<ResourceSamplesDetailEntity> list);

    /**
     * 修改数据
     *
     * @param resourceSamplesDetail 实例对象
     * @return 影响行数
     */
    int update(ResourceSamplesDetailEntity resourceSamplesDetail);

    /**
     * 获取源样品产品明细
     * @param req 查询参数
     * @return 源样品产品明细
     */
    List<ResourceSamplesDetailEntity> getResourceSamplesDetailInfo(ImportResourceSamplesProductReq req);

    /**
     * 获取资源样品库存信息
     * @param req 查询条件
     * @return 资源样品库存信息
     */
    List<ResourceSamplesStockListRsp> getResourceSamplesStockList(ResourceSamplesStockListReq req);

    /**
     * 获取采购样品信息
     * @param req 查询条件
     * @return 采购样品信息
     */
    List<ImportPurchaseSampleRsp> getImportPurchaseSampleInfo(ImportPurchaseSampleReq req);

    /**
     * 通过采购样品主表ID获取对应产品信息
     * @param id 采购样品主表ID
     * @return 采购样品产品信息
     */
    List<ImportPurchaseSampleProductRsp> getPurchaseSampleProductById(Integer id);

    /**
     * 获取已做采购样品数量
     * @param req 查询参数
     * @return 已做采购样品数量
     */
    BigDecimal getPurchaseSampleUsedAmount(PurchaseSampleUsedReq req);

    /**
     * 获取采购样品数量
     * @param req 查询参数
     * @return 采购样品数量
     */
    BigDecimal getPurchaseSampleAmount(PurchaseSampleUsedReq req);


    /**
     * 库存明细统计
     * @param req
     * @return
     */
    List<InventoryDetailStatisticsRsp> getInventoryDetailStatisticsReqList(InventoryDetailStatisticsReq req);
}